# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:张广勤
@Web site: https://www.tunan.wang
@Github:www.github.com
 
@File:Yi_hugua1_0.py
@Time:2024/8/8 9:43

@Motto:不积跬步无以至千里，不积小流无以成江海！
"""


def hexagram_to_binary(hexagram):
    """
    将易经卦象（如乾卦表示为'111111'）转换为二进制字符串。
    这里主要是为了确保输入是有效的，实际上如果直接以二进制字符串输入，这一步可以省略。
    """
    return bin(int(hexagram, 2))[2:].zfill(6)  # 确保是6位的二进制字符串


def get_inner_trigram(binary_hexagram):
    """
    从给定的64卦二进制字符串中提取中间四爻（即第二到第五爻）以形成互卦。
    然后，分割这四爻为下三爻和上三爻（实际上只取中间四爻中的前三爻为下卦，后两爻加上原卦的第五爻为上卦）。
    但这里我们简化为直接取第二、三、四爻为下卦，第三、四、五爻为上卦。
    """
    if len(binary_hexagram) != 6:
        raise ValueError("二进制卦象必须为6位")

    # 提取互卦的上下两卦（中间四爻）
    inner_trigram_lower = binary_hexagram[1:4]  # 下卦：第二、三、四爻
    inner_trigram_upper = binary_hexagram[2:5]  # 上卦：第三、四、五爻（注意这里实际上取了第五爻两次，但符合“互卦”的取法）

    return inner_trigram_lower, inner_trigram_upper


def calculate_mutual_hexagram(hexagram):
    """
    根据给定的64卦（二进制字符串形式），计算其互卦。
    """
    binary_hexagram = hexagram_to_binary(hexagram)
    lower_trigram, upper_trigram = get_inner_trigram(binary_hexagram)

    # 拼接互卦的上下两卦
    mutual_hexagram_binary = lower_trigram + upper_trigram[-3:]  # 注意这里只取upper_trigram的后两位，因为上卦实际是三爻

    # 将二进制字符串转换为易经卦象表示（这里简化为返回二进制字符串）
    return mutual_hexagram_binary


# 示例：计算乾卦（111111）的互卦
hexagram = '110110'
mutual_hexagram = calculate_mutual_hexagram(hexagram)
print("原卦的互卦是：", mutual_hexagram)